#include "savebase.h"

SaveBase::SaveBase(QObject *parent) : QObject(parent)
{
    m_saveStatues = false;
    m_creatDir = true;

    m_currentDiskIndex = 0; // 初始使用disk1
    m_minFreeSpace = 50 * 1024 * 1024; // 最小剩余空间：MB（可调整）
}

void SaveBase::setSaveStatus(bool status)
{
    m_saveStatues = status;
    m_creatDir = status;

    // 如果禁用保存，关闭当前文件
    if (!status && m_file.isOpen()) {
        m_file.close();
    }
}

bool SaveBase::getSaveStatus()const
{
    return m_saveStatues;
}

void SaveBase::setInfo(VIDEO_SAVE_CONFIG config, QString fileSavePath, QStringList diskPaths)
{
    m_srcIP = config.srcIP;
    m_desc = config.des;
    m_videoName = config.resourcesName;
    m_bindPort = config.bindPort;
    m_fileSavePath = fileSavePath; // 基础路径（如"空中图像"，会拼接在磁盘路径diskPaths后）
    m_splitTimeMinutes = 3;     //分割时间：分钟
    m_saveMethod = config.saveMethod;    //存储视频

    //m_diskPaths = diskPaths; // 磁盘路径（根据实际挂载路径修改）

    m_diskPaths = {"C:/Users/delos/Desktop/disk1", "C:/Users/delos/Desktop/disk2",
                   "C:/Users/delos/Desktop/disk3"};

    if(m_file.isOpen())
        m_file.close();
    m_currentDiskIndex = 0; // 重置为disk1

    emit sigStopTimer();    //停止定时器
}

bool SaveBase::checkAndSwitchDisk()
{
    // 遍历磁盘直到找到可用的
    while (m_currentDiskIndex < m_diskPaths.size()) {
        QString currentDisk = m_diskPaths[m_currentDiskIndex];
        QStorageInfo storage(currentDisk); // 获取磁盘信息

        // 检查磁盘是否可用且剩余空间充足
        if (storage.isValid() && storage.isReady()) {
            qint64 freeSpace = storage.bytesAvailable();
            if (freeSpace >= m_minFreeSpace) {
                //qDebug() << "当前使用磁盘:" << currentDisk << "剩余空间:" << freeSpace/(1024*1024) << "MB";
                return true; // 磁盘可用
            } else {
                // 当前磁盘空间不足，切换到下一个
                //emit diskFull(currentDisk); // 发送磁盘满信号
                qDebug() << "磁盘" << currentDisk << "空间不足，切换到下一个";
                m_currentDiskIndex++;
            }
        } else {
            // 磁盘不可用（如未挂载），切换到下一个
            qDebug() << "磁盘" << currentDisk << "不可用，切换到下一个";
            m_currentDiskIndex++;
        }
    }

    // 所有磁盘都不可用,通知上位机磁盘满了
    emit sigAllDiskFull();
    return false;
}
